
#ifndef _STORE_H_
#define	_STORE_H_

#include <iostream.h>
#include <string.h>

#include <Element.h>
#include <Node.h>
#include <Tokens.h>

class Store {
private :
	Node* head;
	int num;

protected :
	Node* allocNode(Element elem);
	void deleteAll();

public :
	Store();
	Store(TokensIter ti);
	Store(char* input);
	Store(char* input, char* sep);

	virtual void add(Element elem);

	void read(TokensIter ti);
	void read(char* input);
	void read(char* input, char* sep);
	int ifExists(Element elem);
	int numElements() const;
	Element* getElements(int& numElements);

	virtual ~Store();

	friend class StoreIter;
};

ostream& operator<<(ostream& os, const Store& store);


class StoreIter {
private :
	const Store* store;
	Node* curr;

public :
	StoreIter(const Store& aStore);
	StoreIter(const StoreIter& from);

	StoreIter& operator=(const StoreIter& from);

	void reset();
	int ok();

	void operator++();

	Node* current();
};

#endif // _STORE_H_

